package com.shuang.stackAndQueue5;

import java.util.ArrayDeque;
import java.util.Deque;

public class EvalRPN {

    public int evalRPN(String[] tokens) {
        //使用栈 当遇到运算符时 取出栈顶的两个元素进行运算 再将结果存到栈中

        //定义栈 栈中只存放数字
        Deque<Integer> stack = new ArrayDeque<>();

        //遍历数组
        for (String s : tokens) {
            if ("+".equals(s)) {
                stack.push(stack.pop() + stack.pop()); //  - 和/ 需要特殊处理
            } else if ("-".equals(s)) {
                stack.push(-stack.pop() + stack.pop());
            } else if ("*".equals(s)) {
                stack.push(stack.pop() * stack.pop());
            } else if ("/".equals(s)) {
                int temp1 = stack.pop();
                int temp2 = stack.pop();
                stack.push(temp2 / temp1);
            } else {
                stack.push(Integer.valueOf(s));
            }
        }

        //最后将结果返回
        return stack.pop();
    }
}
